/*
 * Copyright (C), 2013-2014, 上海汽车集团股份有限公司
 * FileName: CookieUtil.java
 * Author:   wanglijun
 * Date:     2014年8月29日 上午9:52:45
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.blic.utils;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;


/**
 * Cookie 工具类<br>
 * 〈功能详细描述〉
 * 
 * @author douglas
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public class CookieUtil {
 

	/** OPENID 有效时间-一年 */
	public static final int MAXAGE_YEAR = 365 * 24 * 3600;

	/** OPENID 有效时间-一天 */
	public static final int MAXAGE_DAY = 1 * 24 * 3600;

 
	/**
	 * 设置cookie
	 * 
	 * @param response
	 * @param name
	 *            cookie名字
	 * @param value
	 *            cookie值
	 * @param maxAge
	 *            cookie生命周期 以秒为单位
	 */
	public static void addCookieMaxAge(HttpServletResponse response, String name, String value) {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
				.getRequest();
		CookieUtil.addCookie(request, response, name, value, MAXAGE_YEAR);
	}

	/**
	 * 设置cookie
	 * 
	 * @param response
	 * @param name
	 *            cookie名字
	 * @param value
	 *            cookie值
	 * @param maxAge
	 *            cookie生命周期 以秒为单位
	 */
	public static void addCookieMaxAgeDay(HttpServletResponse response, String name, String value) {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
				.getRequest();
		CookieUtil.addCookie(request, response, name, value, MAXAGE_DAY);
	}

	/**
	 * 根据服务器地址返回对应的cookieDomain作用域
	 * 
	 * @param request
	 * @return String
	 */
	private static String getCookieDomain(HttpServletRequest request) {
		return request.getServerName();
	}

	/**
	 * 设置cookie
	 * 
	 * @param response
	 * @param name
	 *            cookie名字
	 * @param value
	 *            cookie值
	 * @param maxAge
	 *            cookie生命周期 以秒为单位
	 */
	public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value,
			int maxAge) {
		Cookie cookie = new Cookie(name, value);
		// System.out.println(getCookieDomain(request));
		// cookie作用域
		cookie.setDomain(getCookieDomain(request));
		cookie.setPath("/");
		if (maxAge > 0)
			cookie.setMaxAge(maxAge);
		response.addCookie(cookie);
	}

	/***
	 * 
	 * 功能描述:根据Cookie Name 获取<br>
	 * 〈功能详细描述〉
	 * 
	 * @param request
	 * @param name
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public static String getCookieByName(HttpServletRequest request, String name) {
		Map<String, Cookie> cookieMap = ReadCookieMap(request);
		if (cookieMap.containsKey(name)) {
			Cookie cookie = (Cookie) cookieMap.get(name);
			if (cookie != null) {
				return cookie.getValue();
			}
		}

		return null;
	}

	/***
	 * 
	 * 功能描述: 读取cookie数据<br>
	 * 〈功能详细描述〉
	 * 
	 * @param request
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
		Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
		Cookie[] cookies = request.getCookies();
		if (null != cookies) {
			for (Cookie cookie : cookies) {
				cookieMap.put(cookie.getName(), cookie);
			}
		}
		return cookieMap;
	}
 

	 

	 
	/***
	 * 
	 * 功能描述: 获取用户UA<br>
	 * 〈功能详细描述〉
	 *
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	public static String getUserAgentInfo(HttpServletRequest request) {
		String value = request.getHeader("user-agent");
		return StringUtils.trimToEmpty(value);
	}

	 
}
